During the past 50 years, computer hardware, architecture, and operating systems that run on computers have evolved to provide ever-increasing storage space, execution speeds, and features that facilitate computer intercommunication, security, application-program development, and ever-expanding range of compatibilities and interfaces to other electronic devices, information-display devices, and information-storage devices. In the 1970's, enormous strides were made in increasing the capabilities and functionalities of operating systems, including the development and commercial deployment of virtual-memory techniques, and other virtualization techniques, that provide to application programs the illusion of extremely large address spaces and other virtual resources. Virtual memory mechanisms and methods provide 32-bit or 64-bit memory-address spaces to each of many user applications concurrently running on computer system with far less physical memory.
Virtual machine monitors provide a powerful new level of abstraction and virtualization. A virtual machine monitor comprises a set of routines that run directly on top of a computer machine interface, and that, in turn, provides a virtual machine interface to higher-level programs, such as operating systems. An operating system, referred to as a “guest operating system,” runs above, and interfaces to, a well-designed and well-constructed virtual-machine interface just as the operating system would run above, and interface to, a bare machine.
A virtual-machine monitor uses many different techniques for providing a virtual-machine interface, essentially the illusion of a machine interface to higher-level programs. A virtual-machine monitor may pre-process operating system code to replace privileged instructions and certain other instructions with patches that emulate these instructions. The virtual-machine monitor generally arranges to intercept and emulate the instructions and events which behave differently under virtualization, so that the virtual-machine monitor can provide virtual-machine behavior consistent with the virtual machine definition to higher-level software programs, such as guest operating systems and programs that run in program-execution environments provided by guest operating systems. The virtual-machine monitor controls physical machine resources in order to fairly allocate physical machine resources among concurrently executing operating systems and preserve certain physical machine resources, or portions of certain physical machine resources, for exclusive use by the virtual-machine monitor.
As part of providing a virtual-machine interface, a virtual-machine monitor needs to provide, to each concurrently executing guest operating system executing above the virtual-machine interface, a virtualized, guest-physical memory and a virtualized guest-virtual-address-translation system that the guest operating system considers to be the actual physical memory of a machine, but which, in fact, is an abstraction provided by the virtual-monitor using underlying machine resources. Virtual-address translation and physical memory access are critical bottlenecks for overall guest-operating-system performance. A virtual-machine monitor therefore needs to employ efficient techniques for providing a guest-physical memory interface to guest operating systems. If, for example, each access to physical memory through virtual addresses by guest operating systems were to generate interruptions that need handling by the virtual-machine monitor, guest-operating-system performance would slow to unacceptable levels. For this reason, designers, implementers, manufacturers, and users of virtual-machine monitors and virtual-monitor-containing computer systems have recognized a need for efficient methods by which virtual-machine monitors can provide a guest-physical memory interface and a guest-virtual-address-translation-system interface to programs interfacing to underlying machine resources through a virtual-monitor-provided virtual-machine interface.